$(function(){
	
	var root = $('#root').val();
	var processDefinitionId = $('#processDefinitionId').val();
	var processInstanceId = $('#processInstanceId').val();
	var taskDefinitionKey = $('#taskDefinitionKey').val();
	var taskId = $('#taskId').val();
	
	// 加载主业务页面及自定义页面
	loadTaskPath(root, processInstanceId, taskId, taskDefinitionKey, processDefinitionId);
	
	// 载入流转历史
	loadHistoicFlow(root, processInstanceId);
	// 流程图展示
	$('#diagramImg').attr('src', root + '/workflowrest/flowchart/' + processInstanceId);
	
	// 是否为会签节点
	var isCounterSign = $('#isCounterSign').val();
	// 分别处理回退、简退、转派及中止按钮显隐
	var buttonBack = $('#buttonBack').val();
	var buttonQuick = $('#buttonQuick').val();
	var buttonTurn = $('#buttonTurn').val();
	var buttonBreak = $('#buttonBreak').val();
	
	// 据是否为会签节点处理按钮事件及显隐
	if(isCounterSign == 'true'){
		// 通过按钮事件添加
		$('#passButton').click(function(){
			addCommentForVote(true);
		});
		// 拒绝按钮事件添加及名称
		$('#backButton').text("拒绝");
		$('#backButton').click(function(){
			addCommentForVote(false);
		});
		// 其余按钮隐藏
		$('#quickButton').hide();
		$('#stopButton').hide();
		$('#turnButton').hide();
	} else {
		// 当前环节是否可中止
		if(buttonBreak == 'true'){
			$('#stopButton').click(function(){
				addCommentForStop();
			});
		} else {
			$('#stopButton').addClass('disabled'); 
		}
		// 当前环节是否可转派
		if(buttonTurn == 'true'){
			$('#turnButton').click(function(){
				addCommentForTurn();
			});
		} else {
			$('#turnButton').addClass('disabled'); 
		}
		// 当前环节是否可回退
		if(buttonBack == 'true'){
			$('#backButton').click(function(){
				addComment(false);
			});
		} else {
			$('#backButton').addClass('disabled'); 
		}
		// 当前环节是否可进行简退操作（必然为非首环节）
		if(buttonQuick == 'true'){
			$('#quickButton').click(function(){
				addCommentForQuick();
			});
		} else {
			$('#quickButton').addClass('disabled'); 
		}
		
		// 是否为简退的退回首环节以进行直接推进操作
		var canQuickPush = $('#canQuickPush').val();
		if(canQuickPush == 'true'){
			// 开始环节执行简退推进的事件绑定
			$('#passButton').click(function(){
				addCommentForStart();
			});
		} else {
			// 正常环节推进事件绑定
			$('#passButton').click(function(){
				var a = $('input:radio:checked').val();
				if(a == 0 && "usertask5" == taskDefinitionKey){
					alert("请确认是否收到纸质文件!");
					return;
				}
				addComment(true);
			});
		}
	}
	
});

// 根据任务ID获取实际任务办理页面的路径并load到主DIV
function loadTaskPath(root, processInstanceId, taskId, taskDefinitionKey, processDefinitionId) {
	// 请求得到实际业务路径
	$.post(root + "/workflowrest/tasktodopath/" + processInstanceId + "/" + taskDefinitionKey + "/" + taskId, null, function(data) {
		
		var success = data.retCode;
		// 返回成功即继续处理，不成功报原因
		if (success == 1){
			// 获取url串及后续参数并赋值给公共参数对象
			var url = root + "/" + data.dataRows[0].url;
			$('#param').val(url.substring(url.indexOf("?") + 1));
			
			// 环节类型赋值
			var startLink = data.dataRows[0].startLink;
			var endLink = data.dataRows[0].endLink;
			$('#startLink').val(startLink);
			$('#endLink').val(endLink);
			
			// 使用业务办理div加载主办页面
			$("#business").load(url);
			
		} else if (success == 0){
			alert(data.retValue);
		}
		// 主页面加载完成后加载自定义标签
		loadCustomTabs(root, $('#param').val(), processDefinitionId, taskDefinitionKey);
	});
}

// 加载全部自定义标签
function loadCustomTabs(root, param, processDefinitionId, taskDefinitionKey){
	
	$.get(root + "/workflowrest/taburls/" + processDefinitionId + "/" + taskDefinitionKey +　"/" + true, 
		function(data) {
			var success = data.retCode;
			// 仅有自定义标签才处理
			if (success == 1){
				for ( var i = 0; i < data.dataRows.length; i++) {
					
					var name = data.dataRows[i].name;
					var url = root + "/" + data.dataRows[i].url + "?" + param;
					
					var tabName = "custom_tab" + (i + 1);
					var divName = "custom_div" + (i + 1);
					
					var div = "<div role=\"tabpanel\" class=\"tab-pane fade\" id='" + divName + "'></div>";
					var htmlLi = "<li id='" + tabName + "' role='presentation'></li>";
					var hrefLi = "<a href='#" + divName + "' aria-controls='" + divName + "' role=\"tab\" data-toggle=\"tab\">" + name + "</a>";
					
					$('#history').before(div);
					//自定义标签div加载辅助页面
					$("#" + divName).load(url);
					
					$('#historyLi').before(htmlLi);
					$("#" + tabName).append(hrefLi);
				}
			}
		}
	);
}

//根据流程实例ID获取流转历史	
function loadHistoicFlow(root, processInstanceId) {
	
	$.get(root + "/workflowrest/histoicflow/" + processInstanceId,
			function(data) {
				var success = data.retCode;
				// 返回成功即继续处理，不成功报原因
				if (success == 1){
					var html = '';
					for ( var i = 0; i < data.dataRows.length; i++) {
						
						var startTime = data.dataRows[i].startTime;
						var endTime = data.dataRows[i].endTime;
						if (endTime == null){
							endTime = '';
						} 
						// 循环拼装表格
						var num = i + 1;
						
						var assigneeName = data.dataRows[i].assigneeName
						if(data.dataRows[i].replace == true){
							assigneeName = assigneeName + "（自动委托）"
						}
						html += "<tr><td>"
								+ num
								+ "</td><td>"
								+ data.dataRows[i].linkName
								+ "</td><td>"
								+ assigneeName
								+ "</td><td>"
								+ data.dataRows[i].orgName
								+ "</td><td>"
								+ data.dataRows[i].handleType
								+ "</td><td>"
								+ startTime
								+ "</td><td>"
								+ endTime
								+ "</td><td style=\"word-wrap:break-word;word-break:break-all;\">"
								+ data.dataRows[i].userComment + "</td></tr>";
					}

					$("#historyContent").html(html);
				} else if (success == 0){
					alert(data.retValue);
				}
			});
}

// 普通环节点击“通过”或“回退”按钮，添加评论
function addComment(pass){
	
	// 确认按钮仅绑定推进事件
	$("#confirmButton").unbind();
	$('#confirmButton').click(function(){
		pushProcess();
	});
	// 处理人选择按钮方法重置
	$("#selectAssignee").unbind();
	$('#selectAssignee').click(function(){
		selectAssigneeNew(false, $('#link').val().split(',')[2]);
	});
	
	$("#linkDiv").show();
	$("#assigneeDiv").show();
	
	if(pass){
		$("#comment").val("同意");
		$("#handleType").val(1);
	} else {
		$("#comment").val("不同意");
		$("#handleType").val(2);
	}		
	
//	$("#out-footer").hide();
//	$("#in-footer").show();
	$("#in-footer").modal("show");
	// 刷新环节及处理人并展现	
	refreshLink();
}
// 会签环节点击“通过”或“拒绝”按钮，添加评论
function addCommentForVote(pass){
	// 确认按钮事件处理
	$("#confirmButton").unbind();
	$('#confirmButton').click(function(){
		pushProcessForVote();
	});
	// 隐藏环节选择及受理人选择
	$("#linkDiv").hide();
	$("#assigneeDiv").hide();
	// 据按钮类型选择处理方式
	if(pass){
		$("#comment").val("通过");
		$("#handleType").val(1);
	} else {
		$("#comment").val("不通过");
		$("#handleType").val(2);
	}
	
//	$("#out-footer").hide();
//	$("#in-footer").show();
	$("#in-footer").modal("show");
}
//点击“中止”按钮，仅弹出意见填写窗口
function addCommentForStop(){

	// 确认按钮仅绑定推进事件
	$("#confirmButton").unbind();
	$('#confirmButton').click(function(){
		stopProcess();
	});
	
	$("#linkDiv").hide();
	$("#assigneeDiv").hide();
	$("#comment").val("中止流程");
//	$("#out-footer").hide();
//	$("#in-footer").show();
	$("#in-footer").modal("show");
}
// 点击“简退”按钮，仅弹出意见填写窗口
function addCommentForQuick(){

	// 确认按钮仅绑定推进事件
	$("#confirmButton").unbind();
	$('#confirmButton').click(function(){
		quickBackProcess();
	});
	
	$("#linkDiv").hide();
	$("#assigneeDiv").hide();
	$("#comment").val("不同意");
//	$("#out-footer").hide();
//	$("#in-footer").show();
	$("#in-footer").modal("show");
}
//简退环节后的首环节“推进”按钮，仅弹出意见填写窗口
function addCommentForStart(){

	// 确认按钮仅绑定推进事件
	$("#confirmButton").unbind();
	$('#confirmButton').click(function(){
		quickPushProcess();
	});
	
	$("#linkDiv").hide();
	$("#assigneeDiv").hide();
	$("#comment").val("同意");
//	$("#out-footer").hide();
//	$("#in-footer").show();
	$("#in-footer").modal("show");
}
// 点击“转派”按钮，仅弹出处理人选择及意见填写窗口
function addCommentForTurn(){
	// 确认按钮仅绑定推进事件
	$("#confirmButton").unbind();
	$('#confirmButton').click(function(){
		transferTask();
	});
	// 处理人选择按钮方法重置
	$("#selectAssignee").unbind();
	$('#selectAssignee').click(function(){
		selectAssignee(true, '');
	});
	
	$("#linkDiv").hide();
	$("#assigneeDiv").show();
	$("#comment").val("请代处理");
//	$("#out-footer").hide();
//	$("#in-footer").show();
	$("#in-footer").modal("show");
}

//环节下拉列表
function refreshLink(){
	
	var root = $('#root').val();
	var taskId = $("#taskId").val();
	var handleType = $("#handleType").val();
	// 业务页面需提供此路径选择值，不提供则后台不筛选此字段
	var pathSelect = $("#pathSelect").val();
	if (pathSelect == undefined) {
		pathSelect = 0;
	}
	
	$.get(root + "/workflowrest/tasklink/" + taskId + "/" + handleType + "/branch/" + pathSelect,
		function(data) {
		
			var success = data.retCode;
			// 返回成功即继续处理，不成功报原因
			$("#link").empty();
			if (success == 1){
				var link = data.dataRows;
				
				$.each(link, function(i, obj){
					$("#link").append("<option value='" + obj.value + "'>" + obj.label + "</option>");
				});
								
				// 最后一环节无需通过时无需选择环节与处理人
				if (link.length == 0 || (link.length == 1 && "END" == link[0].label)) {
					$("#linkDiv").hide();
					$("#assigneeDiv").hide();
				} else {
					$("#linkDiv").show();
					$("#assigneeDiv").show();
					selectAssigneeNew(false, $('#link').val().split(',')[2]);					
					// 刷新人员
					// refreshAssignee(root, processDefinitionKey, $("#link").val().split(",")[0]);	
				}
			} else if (success == 0){
				// 未找到匹配的可选环节，异常情况
				alert("未找到可流转环节，异常请处理！");
			}
		});
}

// 20170417起变动，工作流公共模块不参与业务系统待办处理人筛选，由业务系统自行控制
//人员下拉列表
function refreshAssignee(root, processDefinitionKey, taskDefinitionKey){
	
	// 获取实例ID环节LINK_ID
	var processInstanceId = $("#processInstanceId").val();
	
	$.post(root + "/workflowrest/assignee/" + processDefinitionKey + "/" + taskDefinitionKey + "/" + processInstanceId,
		function(data) {
			var success = data.retCode;
			// 返回成功即继续处理，不成功报原因
			if (success == 1){
				var assignee = data.dataRows;
				
				$("#assignee").empty();
				$.each(assignee, function(i, obj){
					$("#assignee").append("<option value='" + obj.value + "'>" + obj.label + "</option>");	
				});					
			} else if (success == 0){
				alert(data.retValue);
			}
	});	
}

function selectAssigneeNew(turnAssignee, flowLinkid){
//	alert("电子公函  selectAssignee111"+$('#elec_id').val());
//	if (turnAssignee){
//		alert("业务侧示例，转派操作，将公共页面“下环节处理人信息”处理完成");
//	} else {
//		alert("业务侧示例，将公共页面“下环节处理人信息”处理完成，本次接受到的环节ID为：" + flowLinkid);
//	}
	var flowId =flowLinkid;
	var elecApplyId = $('#elec_id').val();
	$.ajax({
        url: '../flowCfgLinkController/showNextStaff',
        type: 'POST',
        dataType:"JSON",
        data: {flowId:flowId,elecApplyId:elecApplyId},
        success: function (data) {
        	$("#assignee").val(data.staffId);
        	$("#assigneeName").val(data.staffName);        	
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert('An error has occured!! :-(');
        }
    });
//	$("#assignee").val(10001);
//	$("#assigneeName").val("示例：处理人");
}
//点击返回按钮，回到默认按钮并情况处理人信息
function selectButton(){
	$("#out-footer").show();
	$("#in-footer").modal('hide');
	
	clearAssignee();
}

// 推动流程
function pushProcess(){
	// 需提交处理的参数
	var taskDefinitionKey = '';
	var withdraw = 0;
	var assignee = '';
	
	// 获取目标环节定义及是否可撤回标志
	var link = $("#link").val();
	
	// !(如果环节与人员选择面板隐藏，且无环节可选，即需要默认推进的环节，默认不可退回)
	/*if(!$("#linkDiv").is(":hidden") && !$("#AndAssignee").is(":hidden") && "END" != $("#link").text()){
		// 若环节与人员选择面板未隐藏，即需要校验是否选择完毕
		var linkAndWithdraw = link.split(",");
		taskDefinitionKey = linkAndWithdraw[0];
		withdraw = linkAndWithdraw[1];
		assignee = $("#assignee").val();
		
		if(taskDefinitionKey.length == 0) {
			alert('请选择环节！');
			return;
		}
		if(assignee == null || assignee== '') {
			alert('请选择处理人！');
			return;
		}
	} else {
		taskDefinitionKey = link.split(",")[0];
	}*/
	if(!$("#linkDiv").is(":hidden")){
		var linkAndWithdraw = link.split(",");
		taskDefinitionKey = linkAndWithdraw[0];
		withdraw = linkAndWithdraw[1];
		
		if(taskDefinitionKey.length == 0) {
			alert('请选择环节！');
			return;
		}
	} else {
		taskDefinitionKey = link.split(",")[0];
	}
	if(!$("#assigneeDiv").is(":hidden")){
		assignee = $("#assignee").val();
		
		if(assignee == null || assignee == '') {
			alert('请选择处理人！');
			return;
		}
	}
	
	var comment = $("#comment").val();
	if(comment.length == 0) {
		alert('请填写审批意见！');
		return;
	}
	
	var r = confirm("是否确认提交？");
	if (r == true) {
		// 调用推进方法，通过及回退均调用此方法，如参分别为（目标环节定义，目标处理人，流程实例ID， 任务ID， 用户意见，处理类型， 是否可撤回 ） 
		modal_passNew($('#root').val(), taskDefinitionKey, assignee, $('#processInstanceId').val(), $('#taskId').val(), comment, $('#handleType').val(), withdraw);
	}
}
// 会签环节专用流程推动
function pushProcessForVote(){
	var comment = $("#comment").val();
	if(comment.length == 0) {
		alert('请填写审批意见！');
		return;
	}
	
	var r = confirm("是否确认提交？");
	if (r == true) {
		// 调用推进方法，会签环节同意及拒绝均调用此方法，如参分别为（目标环节定义，目标处理人，流程实例ID， 任务ID， 用户意见，处理类型， 是否可撤回 ），非必要参数传空串
		modal_passNew($('#root').val(), '', '', $('#processInstanceId').val(), $('#taskId').val(), comment, $('#handleType').val(), '');
	}
}

//流程终止，即仅首环节可以流程作废
function stopProcess(){
	var comment = $("#comment").val();
	if(comment.length == 0) {
		alert('请填写审批意见！');
		return;
	}
	
	var r = confirm("【终止】确认后，当前流程将在本环节结束，是否确认？");
	if (r == true) {
		// 调用中止方法
		modal_stop($('#root').val(), $('#processInstanceId').val(), $('#taskId').val(), comment);
	}
}
// 流程简退-退回操作，即不存在业务数据变动的环节回退任务至首环节
function quickBackProcess(){
	
	// 抽取参数
	var root = $('#root').val();
	var processInstanceId = $('#processInstanceId').val();
	var taskId = $('#taskId').val();
	var comment = $("#comment").val();
	if(comment.length == 0) {
		alert('请填写审批意见！');
		return;
	}
	
	var r = confirm("【简退】确认后，当前任务将回退给流程发起人，是否确认？");
	if (r == true) {
		// 调用简退-回退方法
		$.post(root + "/workflowrest/pushprocesstostart/" + processInstanceId + "/" + taskId, {
			"comment" : comment
		}, function(data) {
			if(data.retCode == 1){
				alert("任务已回退至流程发起人！");
				// 成功后回调模态窗口关闭方法
				modal_close();
			}
		});
	}
}
//流程简退-首环节推进操作，即不存在业务数据变动的首环节推进至之前回退
function quickPushProcess(){
	
	// 抽取参数
	var root = $('#root').val();
	var processInstanceId = $('#processInstanceId').val();
	var taskId = $('#taskId').val();
	var comment = $("#comment").val();
	if(comment.length == 0) {
		alert('请填写审批意见！');
		return;
	}
	
	var r = confirm("确认后，当前任务将提交至流程简退退回人，是否确认？");
	if (r == true) {
		// 调用简退-回退方法
		$.post(root + "/workflowrest/pushprocessreturnback/" + processInstanceId + "/" + taskId, {
			"comment" : comment
		}, function(data) {
			if(data.retCode == 1){
				alert("任务已提交至流程退回人！");
				// 成功后回调模态窗口关闭方法
				modal_close();
			}
		});
	}
}

// 任务转派
function transferTask(){
	
	// 抽取参数
	var root = $('#root').val();
	var processInstanceId = $('#processInstanceId').val();
	var taskId = $('#taskId').val();
	var assignee = $("#assignee").val();
	var comment = $("#comment").val();
	
	if(assignee == null || assignee == '') {
		alert('请选择处理人！');
		return;
	}
	if(comment.length == 0) {
		alert('请填写审批意见！');
		return;
	}
	
	// 示例中只会转派给当前登录人，业务侧需要自行拓展
	var r = confirm("【转派】确认后，当前任务将转派给已选择受理人，是否确认？");
	if (r == true) {
		// 调用转派方法
		$.post(root + "/workflowrest/transfertask/" + processInstanceId + "/" + taskId + "/" + assignee, {
			"comment" : comment
		}, function(data) {
			if(data.retCode == 1){
				alert("转派完成！");
				// 成功后回调模态窗口关闭方法
				modal_close();
			}			
		});
	}
}

//清空下环节处理人已选择内容
function clearAssignee(){
	$("#assignee").val('');
	$("#assigneeName").val('');
}
// 提供业务主页用户关闭模态窗口的按钮
function modal_close(){
	$('#returnList').click();
}

function modal_passNew(root, taskDefinitionKey, assignee, processInstanceId, taskId, comment, handleType, withdraw){
	//alert("modal_pass 111");
	alert( "目标任务定义：" + taskDefinitionKey + "_目标受理人：" + assignee + "_流程实例ID：" + processInstanceId + "_当前任务ID：" + taskId + "_审批意见：" + comment + "_处理方式：" + handleType + "_是否可回撤" + withdraw);
	
	return;
		$.post(root + "/elecBusiness/pushProcess", {
			"processInstanceId" : processInstanceId,
			"taskId" : taskId,
			"taskDefinitionKey" : taskDefinitionKey,
			"assignee" : assignee,
			"comment" : comment,
			"handleType" : handleType,
			"withdraw" : withdraw
		}, function(data) {
			//alert(data.sign + "（业务开发人员自定义提示消息有无及内容）");
			alert("成功");
			// 成功后回调模态窗口关闭方法
			modal_close();
		});
}